import express from 'express';
import jwt from 'jsonwebtoken';
import mockUsers from '../data/user.js';
const router = express.Router();

// 从环境变量读取密钥，生产环境应使用此方式
const SECRET_KEY = process.env.JWT_SECRET || 'your-secret-key-keep-it-safe';

// 模拟验证码存储
const captchas = new Map();

// 生成验证码（实际项目中可以集成图形验证码库）
router.get('/captcha', (req, res) => {
  const captchaText = Math.random().toString(36).substring(2, 8).toUpperCase();
  const captchaId = Date.now().toString();
  captchas.set(captchaId, captchaText);
  
  // 设置5分钟过期
  setTimeout(() => {
    captchas.delete(captchaId);
  }, 5 * 60 * 1000);
  
  res.send({
    code: 200,
    message: 'success',
    data: {
      captchaId,
      captchaText // 实际项目中应该返回图片或Base64编码的图片
    }
  });
});

// 登录接口
router.post('/login', (req, res) => {
  const { username, password} = req.body;
  console.log(1111,username, password);
  
  // 验证请求参数
  if (!username || !password) {
    return res.status(400).send({
      code: 400,
      message: '用户名、密码不能为空',
      data: null
    });
  }
  // 验证验证码
//   if (captchaId && captchas.has(captchaId)) {
//     const storedCaptcha = captchas.get(captchaId);
//     if (storedCaptcha.toLowerCase() !== captcha.toLowerCase()) {
//       return res.status(400).send({
//         code: 400,
//         message: '验证码错误',
//         data: null
//       });
//     }
//     // 验证码验证成功后删除，防止重复使用
//     captchas.delete(captchaId);
//   }
  
  // 查找用户
  const user = mockUsers.find(u => u.username === username);
  console.log(2222,user);
  
  // 验证用户凭据
  if (!user || user.password !== password) {
    return res.status(400).send({
      code: 400,
      message: '用户名或密码错误',
      data: null
    });
  }
  
  // 生成JWT令牌
  const token = jwt.sign({
    id: user.id,
    username: user.username,
    userType: user.userType
  }, SECRET_KEY, { expiresIn: '1h' });
  
  // 生成刷新令牌
  const refreshToken = jwt.sign({
    id: user.id,
    username: user.username
  }, SECRET_KEY, { expiresIn: '7d' });
  
  // 返回用户信息（不包含敏感信息）
  const userInfo = {
    id: user.id,
    username: user.username,
    nickname: user.nickname,
    avatar: user.avatar,
    email: user.email,
    phone: user.phone,
    userType: user.userType,
    permissions: user.permissions
  };
  res.send({
    code: 200,
    message: '登录成功',
    data: {
      accessToken: token,
      refreshToken,
      userInfo
    }
  });
});

// 刷新令牌接口
router.post('/refresh-token', (req, res) => {
  const { refreshToken } =   req.body;
  console.log(4444,refreshToken);
  
  if (!refreshToken) {
    return res.status(401).send({
      code: 401,
      message: '刷新令牌不能为空',
      data: null
    });
  }
  
  try {
    // 验证刷新令牌
    const decoded = jwt.verify(refreshToken, SECRET_KEY);
    
    // 查找用户
    const user = mockUsers.find(u => u.id === decoded.id);
    console.log(5555,user);
    
    if (!user) {
      return res.status(401).send({
        code: 401,
        message: '无效的用户',
        data: null
      });
    }
    
    // 生成新的访问令牌
    const newToken = jwt.sign({
      id: user.id,
      username: user.username,
      userType: user.userType
    }, SECRET_KEY, { expiresIn: '1h' });
    
    // 可以选择是否生成新的刷新令牌
    const newRefreshToken = jwt.sign({
      id: user.id,
      username: user.username
    }, SECRET_KEY, { expiresIn: '7d' });

    console.log(555,{
      code: 200,
      message: '令牌刷新成功',
      data: {
        token: newToken,
        refreshToken: newRefreshToken
      }
    } );
    
    
    res.send({
      code: 200,
      message: '令牌刷新成功',
      data: {
        accessToken: newToken,
        refreshToken: newRefreshToken
      }
    });
  } catch (error) {
    res.status(401).send({
      code: 401,
      message: '无效的刷新令牌',
      data: null
    });
  }
});

// 注销登录接口
router.post('/logout', (req, res) => {
  // 在实际项目中，这里可以将令牌加入黑名单或执行其他清理操作
  res.send({
    code: 200,
    message: '注销成功',
    data: true
  });
});

// JWT验证中间件
const verifyToken = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];
  
  if (!token) {
    return res.status(401).send({
      code: 401,
      message: '未授权访问',
      data: null
    });
  }
  
  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    req.user = decoded;
    next();
  } catch (error) {
    res.status(401).send({
      code: 401,
      message: '令牌已过期或无效',
      data: null
    });
  }
};

export { router as authRouter, verifyToken };